package com.fary.boot;

import com.fary.context.ConfigurableApplicationContext;
import com.fary.core.env.ConfigurableEnvironment;

public interface SpringApplicationRunListener {

	/**
	 * run方法开始执行时
	 */
	default void starting() {
	}

	/**
	 * Environment准备好之后
	 */
	default void environmentPrepared(ConfigurableEnvironment environment) {
	}

	/**
	 * ApplicationContext准备好之后
	 */
	default void contextPrepared(ConfigurableApplicationContext context) {
	}

	/**
	 * ApplicationContext加载完成
	 */
	default void contextLoaded(ConfigurableApplicationContext context) {
	}

	/**
	 * run方法启动完成，回调ApplicationRunner和CommandLineRunner之前
	 */
	default void started(ConfigurableApplicationContext context) {
	}

	/**
	 * run方法执行完成，马上出方法栈时
	 */
	default void running(ConfigurableApplicationContext context) {
	}

	/**
	 * 运行异常时，执行的逻辑
	 */
	default void failed(ConfigurableApplicationContext context, Throwable exception) {
	}

}